/*
 * Beta.java
 *
 * Created on 2 de noviembre de 2001, 08:30 AM
 */

package RiesgoDiscreto.Robustez;

/**
 *
 * @author  Administrador
 * @version
 */
public class Beta {
    
    private int n_alternativas;
    private int n_estNatura;
    private double[][] m_riesgo;
    private double[] probabilidad;
    private double[] Zmax;
    private double[] Zmin;
    private double[][] Fi;
    private double B;
    private double[] R_beta;
    
    public Beta(double m,int alt,int nat, double[][] riesgo,double[] prob) {
        n_alternativas=alt;
        n_estNatura=nat;
        m_riesgo=riesgo;
        probabilidad=prob;
        B=m;
        Zmin=Utiles.SacaMaximosMinimos.MiniColum(m_riesgo,n_alternativas,n_estNatura);
        Zmax=Utiles.SacaMaximosMinimos.MaxiColum(m_riesgo,n_alternativas,n_estNatura);;
        
        Fi=new double[n_alternativas][n_estNatura];
        R_beta=new double[n_alternativas];
        
        // Procedimiento
        ConstruyeFi();
        CalculoR(Fi,probabilidad);
        
    }
    
    
    private double[][] ConstruyeFi(){
        double[][] m_aux=new double[n_alternativas][n_estNatura];
        for(int i=0;i<n_alternativas;i++){
            for(int j=0;j<n_estNatura;j++){
                m_aux[i][j]=(Zmax[j]-m_riesgo[i][j])/(Zmax[j]-Zmin[j]);
            }
        }
        
        for(int i=0;i<n_alternativas;i++){
            for(int j=0;j<n_estNatura;j++){
                if(m_aux[i][j]<=B)
                    Fi[i][j]=1;
                else
                    Fi[i][j]=0;
            }
        }
        return Fi;
    }
    /* El resultado corresponde a un valor de R por alternativa, es decir A1=# A2=# etc */
    private double[]  CalculoR(double[][]mat,double[] vect){
        for(int i=0;i<n_alternativas;i++){
            for(int j=0;j<n_estNatura;j++){
                R_beta[i]+=vect[j]*mat[i][j];
            }
        }
        return R_beta;
    }
    
    public double[] getBeta(){
        
        return R_beta;
    }
}